package com.heima.leetcode.practice;

/**
 * @author 勾新杰
 * @version 1.0
 * @description: leetcode 268. 丢失的数字
 * @date 2025/3/20 11:03
 */
public class E268 {

    /**
     * <h3>方法一：求和方式</h3>
     *
     * @param nums 待处理数组
     * @return 丢失的数字
     */
    public int missingNumber1(int[] nums) {
        int length = nums.length, actualSum = 0;
        for (int num : nums) actualSum += num;
        int expectedSum = length * (length + 1) >> 1;
        return expectedSum - actualSum;
    }

    /**
     * <h3>方法二：异或运算</h3>
     * 原理：相同的数异或结果为0，任何数与0异或的结果为该数本身
     * 那么我们将0 - n的所有数和nums数组中的所有数进行异或，那么结果就是丢失的数字
     *
     * @param nums 待处理数组
     * @return 丢失的数字
     */
    public int missingNumber2(int[] nums) {
        int length = nums.length, missing = length;
        for (int i = 0; i < nums.length; i++) {
            missing ^= i;
            missing ^= nums[i];
        }
        return missing;
    }
}
